"""
给定一个二叉搜索树，编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。

说明：
你可以假设 k 总是有效的，1 ≤ k ≤ 二叉搜索树元素个数。

示例 1:

输入: root = [3,1,4,null,2], k = 1
   3
  / \
 1   4
  \
   2
输出: 1

思路，中序遍历可以按顺序输出，我们只需要输出k个就行了
"""

from leetcode_test import TreeNode
class Solution:
    def kthSmallest(self, root: TreeNode, k: int) -> int:
        def helper(root):
            if not root:
                return
            yield from helper(root.left)
            yield root.val
            yield from helper(root.right)
        
        s = helper(root)
        ans = None
        for _ in range(k):
            ans = next(s)
        return ans

if __name__ == "__main__":
    t = TreeNode.create([3,1,4,None,2])
    print(Solution().kthSmallest(t, 3))
